package com.mybase.app.fourBase;

import android.app.Activity;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.IBinder;
import android.view.View;
import android.widget.Button;
import com.mybase.app.R;

/**
 * Created by happy_000 on 2014/10/20.
 */

/**********
 * 　如果打算采用Context.startService()方法启动服务，在服务未被创建时，系统会先调用服务的onCreate()方法，接着调用onStart()方法。如果调用startService()方法前服务已经被创建，
 * 多次调用startService()方法并不会导致多次创建服务，
 * 但会导致多次调用onStart()方法。采用startService()方法启动的服务，只能调用Context.stopService()方法结束服务，服务结束时会调用onDestroy()方法。

 如果打算采用Context.bindService()方法启动服务，在服务未被创建时，系统会先调用服务的onCreate()方法，接着调用onBind()方法。这个时候调用者和服务绑定在一起，调用者退出了，
 系统就会先调用服务的onUnbind()方法，接着调用onDestroy()方法。如果调用bindService()方法前服务已经被绑定，多次调用bindService()方法并不会导致多次创建服务及绑定(也就是说onCreate()
 和onBind()方法并不会被多次调用)。
 如果调用者希望与正在绑定的服务解除绑定，可以调用unbindService()方法，调用该方法也会导致系统调用服务的onUnbind()-->onDestroy()方法.
 */
public class BindServiceActivity extends Activity {
    private Button startBtn;
    private Button stopBtn;
    private boolean flag;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.start_service);
        flag = false;
        //设置
        startBtn = (Button)this.findViewById(R.id.btn_bind);
        stopBtn = (Button)this.findViewById(R.id.btn_unbind);
        startBtn.setOnClickListener(listener);
        stopBtn.setOnClickListener(listener);
    }

    private View.OnClickListener listener = new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            switch (v.getId()) {
                case R.id.btn_bind:
                    bindService();
                    break;
                case R.id.btn_unbind:
                    unBind();
                    break;
                default:
                    break;
            }
        }


    };

    private void bindService(){
        Intent intent = new Intent(BindServiceActivity.this,LocalService.class);
        bindService(intent, conn, Context.BIND_AUTO_CREATE);
    }

    private void unBind(){
        if(flag == true){
            unbindService(conn);
            flag = false;
        }
    }

    private ServiceConnection conn = new ServiceConnection() {

        @Override
        public void onServiceDisconnected(ComponentName name) {

        }

        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {
            LocalService.LocalBinder binder = (LocalService.LocalBinder)service;
            LocalService bindService = binder.getService();
            bindService.MyMethod();
            flag = true;
        }
    };

}
